import { Disciple } from '../domain/Disciple';
import { RecycleBinItem } from '../domain/RecycleBinItem';

/**
 * 回收站管理服务
 * 处理软删除的弟子数据的存储和恢复
 */
export class RecycleBinService {
    private static items: RecycleBinItem[] = [];
    private static storageKey = 'chengzheng_recycle_bin';
    
    /**
     * 初始化回收站服务
     * 从本地存储加载数据
     */
    static initialize(): void {
      this.loadFromStorage();
    }
    
    /**
     * 添加弟子到回收站
     * @param disciple 要删除的弟子对象
     */
    static addToRecycleBin(disciple: Disciple): void {
      const item = new RecycleBinItem(
        JSON.parse(JSON.stringify(disciple)), // 深拷贝弟子对象
        new Date().toISOString()
      );
      this.items.push(item);
      this.saveToStorage();
    }
    
    /**
     * 获取回收站中的所有项目
     * @returns 回收站项目列表
     */
    static getRecycleBinItems(): RecycleBinItem[] {
      return this.items;
    }
    
    /**
     * 从回收站恢复弟子
     * @param id 弟子ID
     * @returns 恢复的弟子对象或null
     */
    static restoreFromRecycleBin(id: string): Disciple | null {
      const index = this.items.findIndex(item => item.disciple.id === id);
      if (index === -1) return null;
      
      const item = this.items[index];
      this.items.splice(index, 1);
      this.saveToStorage();
      
      return item.disciple;
    }
    
    /**
     * 永久删除回收站中的弟子
     * @param id 弟子ID
     * @returns 是否删除成功
     */
    static permanentlyDelete(id: string): boolean {
      const index = this.items.findIndex(item => item.disciple.id === id);
      if (index === -1) return false;
      
      this.items.splice(index, 1);
      this.saveToStorage();
      return true;
    }
    
    /**
     * 清空回收站
     */
    static clearRecycleBin(): void {
      this.items = [];
      this.saveToStorage();
    }
    
    /**
     * 从本地存储加载回收站数据
     */
    private static loadFromStorage(): void {
      try {
        const stored = localStorage.getItem(this.storageKey);
        if (stored) {
          const data = JSON.parse(stored);
          // 重新创建回收站项目对象
          this.items = data.map((item: any) => 
            new RecycleBinItem(item.disciple, item.deletedAt, item.deletedBy)
          );
        }
      } catch (error) {
        console.error('加载回收站数据失败:', error);
        this.items = [];
      }
    }
    
    /**
     * 保存回收站数据到本地存储
     */
    private static saveToStorage(): void {
      try {
        localStorage.setItem(this.storageKey, JSON.stringify(this.items));
      } catch (error) {
        console.error('保存回收站数据失败:', error);
      }
    }
  }